/*
 * @Author: 康家赫 13349195+kangjiahe666@user.noreply.gitee.com
 * @Date: 2024-04-26 19:50:26
 * @LastEditors: 康家赫 13349195+kangjiahe666@user.noreply.gitee.com
 * @LastEditTime: 2024-05-26 23:09:56
 * @FilePath: \MDK-ARMd:\Desktop\mcu_practice\mcu_experience1\kjh_usingcode\OS.c
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include "oled.h"
#include "stm32f1xx_hal.h"
#include "controler.h"
#include "delay.h"
#include "OS.h"
#include "rocker.h"
#include "LED.h"
#include "mode.h"
#include "temp_warning.h"
#include "modbus_use.h"

// 任务搁置，断点人工保存：工作进度与想法存档：2024-04-28 22:01:00：试图用X，Y两个参数控制页面
// 即用一套xy实现从遥感对参数的控制，然后分析响应:!失败！。失败分析：1.rocker——order不能改变参数（用常数替代时，页面会变）
// 显示bug：如loading不消除、闪屏等。
// OS任务无限期搁置。下一步工作内容：将四向遥感分析函数分为两个轴进行分析。。。。 still have long way to go


//2024-05-20 12:37    1.修复了上述的所有bug  2.新发现问题：温度报警无法跳出循环
//3.关于oled显示：频闪通过逻辑调整实现解决。显示指令留存的问题可以通过相应位置给出显示空格的指令可解决
//预计下次工作：A.用遥感的按键中断跳出工作循环


//2024-05-26 23:18  本次完成代码修改了modbus实验中不同数据的寄存器位置，便于更好的使用kingview进行监控。
//新发现的bug：modbus实验中，上下使用遥感会直接跳转到其他实验。便于应付实验检查：实验激活后，与温度实验一样进入死循环，中断问题闲下来再说。
//总结：现存bug：操作系统逻辑问题严重。

uint16_t Rocker_Y_Value;
uint16_t Rocker_X_Value;

void main_menu()
{
    OLED_ShowString(0, 20, " . by KJH    ", 16);
    OLED_Refresh();
}

void main1_menu()//led(实验一菜单)
{
    OLED_ShowString(0, 20, "exp:LED         ", 16);
    OLED_Refresh();
}

void main2_menu()//温度报警实验
{
    OLED_ShowString(0, 20, "exp:TEMPERATURE", 16);
    OLED_Refresh();
}

void main3_menu()//modbus实验
{  
    OLED_ShowString(0, 48, "                 ", 16);
    OLED_ShowString(0, 0,  "                 ",16);
    OLED_ShowString(0, 20, "exp:MODBUS      ", 16);
    OLED_Refresh();
}





void os_working()
{
    rocker_order_y(); // 获取用来判断的值x，y的变化
    rocker_order_x();
    if (y>4)
    {
        y=1;
    }
    
    if (y == 0)
    {
        x=0;
        main_menu();
    }
    if (y == 1)
    {   
        if (x == 0)
        {
            main1_menu(); // led
        }
        if (x == 1)
        {
            y=1;
            OLED_ShowString(0, 20, "   mode:1  ", 16);
            OLED_Refresh();
            lightUp_one_by_one();
        }
        if (x == 2)
        {
            y=1;
            OLED_ShowString(0, 20, "   mode:2  ", 16);
            OLED_Refresh();
            lightup_all_leds();
        }
        if (x == 3)
        {
            y=1;
            OLED_ShowString(0, 20, "   mode:3  ", 16);
            OLED_Refresh();
            breath_leds();
        }
        if (x == 4)
        {
            y=1;
            OLED_ShowString(0, 20, "   mode:4  ", 16);
            OLED_Refresh();
            flash_leds();
        }
        if (x == 5)
        {
            y=1;
            OLED_ShowString(0, 20, "   mode:5  ", 16);
            OLED_Refresh();
            alternate_flash_leds();
        }
        if (x == 6)
        {
            y=1;
            OLED_ShowString(0, 20, "   mode:6  ", 16);
            OLED_Refresh();
            double_alternate_flash_leds();
        }
        if (x == 7)
        {
            y=1;
            OLED_ShowString(0, 20, "   mode:7  ", 16);
            OLED_Refresh();
            all_flash_then_sequential_turnoff();
        }
        if (x == 8)
        {
            y=1;
            OLED_ShowString(0, 20, "   mode:8  ", 16);
            OLED_Refresh();
            wave_blink_all_LEDs();
        }
        if (x > 8) // 循环
        {
            x = 1;
        }
    }
    if (y == 2)
    {
        if (x == 0)
        {   
            OLED_ShowString(0, 20, "                ", 16);
            main2_menu(); // 温度警告
        }
        if (x == 1)
        {
            y=2;
            temp_warning();
        }
         if (x > 1) // 循环
        {
            y = 2;
            x = 2;
        }
    }
    if (y == 3)
    {
        if (x == 0)
        {   
            main3_menu(); // modbus
        }
        if (x == 1)
        {
            y=3;
            while (y==3&x==1)
            {
            modbus_working();
            }
        }
         if (x > 1) // 循环
        {   
            y = 3;
            x = 2;
        }
    }
}

void os_working_test()//用于看清逻辑无实际意义
{
    rocker_order_y(); // 获取用来判断的值x，y的变化
    rocker_order_x();
    if (y>4)
    {
        y=1;
    }
    if (y == 0)
    {
        x=0;
    }
    if (y == 1)
    {   
        if (x == 0)
        {
        }
        if (x == 1)
        {
            y=1;
        }
        if (x == 2)
        {
            y=1;
        }
        if (x == 3)
        {
            y=1;
        }
        if (x == 4)
        {
            y=1;
        }
        if (x == 5)
        {
            y=1;
        }
        if (x == 6)
        {
            y=1;
        }
        if (x == 7)
        {
            y=1;
        }
        if (x == 8)
        {
            y=1;
        }
        if (x > 8) // 循环菜单
        {
            x = 1;
        }
    }
    if (y == 2)
    {
        if (x == 0)
        {   
        }
        if (x == 1)
        {
            y = 2;
        }
         if (x > 2) // 循环
        {
            y = 2;
            x = 2;
        }
    }
    if (y == 3)
    {
        if (x == 0)
        {   
        }
        if (x == 1)
        {
            y=3;
            
        }
         if (x > 2) // 循环
        {   
            y = 3;
            x = 2;
        }
    }
}